package com.chai.controller;

import com.chai.domain.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Date;
import java.util.List;

/**
 * 相当于servlet包
 * */
//spring交给bean进行管理
@Controller
//请求前缀
@RequestMapping("/user")
public class UserController {
    /**
     * name和age是接受请求参数
     * */
    //设置访问路径：/user/save
    @RequestMapping("/save")
    //设置响应的注解，作为响应体返回方法的返回值
    @ResponseBody
    public String save(String name,int age){
        System.out.println("user save...");
        System.out.println("name请求参数:"+name);
        System.out.println("age请求参数:"+age);
        return "{'save','execute'}";
    }
    /**
     * 请求参数的名称与方法中定义的名称不同需要加入@RequestParam("")进行变量名称的映射
     * 没有添加响应体，返回值会当成页面进行跳转。以下跳转到hello.html
     * */
    @RequestMapping("/login")
    public String login(@RequestParam("name") String username, @RequestParam("password") String password){
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        return "hello.html";
    }
    /**
     * 引用实体类型
     * 如果请求参数的值对应对象的属性，直接封装为对象
     * 对于User类中的address引用类型，在传参数的时候使用address.city
     * */
    @RequestMapping("/userParam")
    @ResponseBody
    public User UserParam(User user){
        System.out.println(user.toString());
        return user;
    }
    /**
     * 用于复选框的多选
     * 传参数多此使用
     * */
    @RequestMapping("/arrayParam")
    @ResponseBody
    public String[] arrayParam(String[] likes){
        for (int i = 0; i < likes.length; i++) {
            System.out.println(likes[i]);
        }
        return likes;
    }
    /**
     * 集合需要进行指定@RequestParam，防止识别为类，这里表示接口
     * */
    @RequestMapping("/listParam")
    @ResponseBody
    public List listParam(@RequestParam("list") List<String> list){
        for (String o : list) {
            System.out.println(o);
        }
        return list;
    }
    /**
     * 在请求body中发送json请求，利用user进行接收
     * 需要添加@RequestBody
     * 相应json数据自动将user转换为json数据相应给页面
     * */
    @RequestMapping("/jsonData")
    @ResponseBody
    public User jsonData(User user){
        System.out.println(user.toString());
        return user;
    }
    /**
     * DateTimeFormat进行指定接受日期时间的格式
     * */
    @RequestMapping("/dateData")
    @ResponseBody
    public String dateData(@DateTimeFormat(pattern = "yyyy-mm-dd")Date date){
        System.out.println("yyyy-MM-dd:"+date);
        return "{'login':'success','login','error'}";
    }
    /**
     * 相应页面的跳转，跳转到index.jsp
     * 问题：这里需要去除user请求的前缀
     * */
    @RequestMapping("/toPage")
    public String toPage(){
        System.out.println("toPage() execute...");
//        return "hello.html";
        return "index.jsp";
    }
}
